In general, a microcontroller may communicate commands to a direct memory access (DMA) circuit for execution. Larger commands may comprise smaller commands, e.g., subcommands. As a result, a DMA component may process, execute and/or modify the subcommands communicated by the microcontroller. In return, the DMA may communicate the data resulting from processing, executing and/or modifying the subcommands back to the microcontroller.
Unfortunately, using a memory component as an interface between a microcontroller and a DMA component can be inefficient and wasteful. For example, using a memory component as an interface enables either the microcontroller or the DMA to only have access to the memory component at any given time. In other words, the microcontroller and the DMA cannot have shared access to the memory component simultaneously. For example, the memory component is inaccessible to the DMA when the microcontroller is loading a subcommand to the memory component, thereby wasting DMA resources. Similarly, the memory component is inaccessible to the microcontroller when the DMA is accessing the memory component to load data resulting from processing, executing and/or modifying a subcommand previously loaded by the microcontroller, thereby wasting microcontroller resources.
Accordingly, the conventional system using memory as an interface between a processor and the DMA engine is wasteful because DMA resources are idle until the microcontroller completes accessing the memory component. Similarly, the microcontroller resources are idle until the DMA completes accessing the memory component. In other words, the conventional system is inefficient because the DMA resources are not utilized when a microcontroller is accessing the memory component and vice versa.